package com.jingdianjichi.auth.application.controller;

import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 测试sa-token
 */
@RestController
@RequestMapping("/test/user")
public class testController {

    /**
     * 下面两个方法都是cookie实现的亲
     */
    // 测试登录，浏览器访问： http://localhost:3011/test/user/doLogin?username=zhang&password=123456
    @RequestMapping("/doLogin")
    public String doLogin(String username, String password) {
        String result = "登录失败";

        // 此处仅作模拟示例，真实项目需要从数据库中查询数据进行比对
        if ("zhang".equals(username) && "123456".equals(password)) {
            // 会话登录，参数填登录人的账号id
            StpUtil.login("抖音");
            result = "登录成功";
        }
        return result;
    }

    // 查询登录状态，浏览器访问： http://localhost:3011/test/user/isLogin
    @RequestMapping("/isLogin")
    public String isLogin() {
        //工具类来的
        return "当前会话是否登录：" + StpUtil.isLogin();
    }


    /**
     * token方式进行认证
     */
    // 登录接口
    // 测试登录，浏览器访问： http://localhost:3011/test/user/doLogin-token?username=zhang&password=123456
    @RequestMapping("/doLogin-token")
    public SaResult doLogin() {
        // 第1步，先登录上
        StpUtil.login("抖音");
        // 第2步，获取 Token  相关参数
        SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
        // 第3步，返回给前端
        return SaResult.data(tokenInfo);
    }


    //http://localhost:3011/test/user/logout
    @RequestMapping("/logout")
    public SaResult logout(){
        StpUtil.logout("抖音");

        return SaResult.ok();
    }


    /*
        auth和sa-token没有一点关系,他仅仅就是和数据库进行交互,如果不在网关做的话,所有的微服务都要引入sa-token了,非常的麻烦奥
            我们把所有的鉴权的模块放到GateWay中,这样就拦截的亲亲gateWay通过nacos路由到各个微服务中
            不要把鉴权和业务进行强耦合亲戚
     */
}
